{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Pandas实现groupby分组统计"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "类似SQL:<br>\n",
    "select student,sum(grade) from stu_grade group by student;\n",
    "\n",
    "groupby: 先对数据分组，之后再每个分组上应用聚合函数、转换函数\n",
    "\n",
    "---\n",
    "\n",
    "演示内容：\n",
    "1. 分组使用聚合函数做数据统计;\n",
    "2. 遍历groupby的结果理解执行流程;\n",
    "3. 实例分组探索天气数据;\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "# 加上这句，能在juypter notebook展示matplot图表\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>0.953909</td>\n",
       "      <td>-1.749344</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>bar</td>\n",
       "      <td>one</td>\n",
       "      <td>-0.065097</td>\n",
       "      <td>0.066270</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>foo</td>\n",
       "      <td>two</td>\n",
       "      <td>1.679496</td>\n",
       "      <td>-1.617316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>bar</td>\n",
       "      <td>three</td>\n",
       "      <td>0.302761</td>\n",
       "      <td>0.505803</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>foo</td>\n",
       "      <td>two</td>\n",
       "      <td>-1.015058</td>\n",
       "      <td>-0.899095</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>bar</td>\n",
       "      <td>two</td>\n",
       "      <td>-0.415399</td>\n",
       "      <td>0.549753</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>-0.831433</td>\n",
       "      <td>-1.157519</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>foo</td>\n",
       "      <td>three</td>\n",
       "      <td>-0.285010</td>\n",
       "      <td>-1.067717</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A      B         C         D\n",
       "0  foo    one  0.953909 -1.749344\n",
       "1  bar    one -0.065097  0.066270\n",
       "2  foo    two  1.679496 -1.617316\n",
       "3  bar  three  0.302761  0.505803\n",
       "4  foo    two -1.015058 -0.899095\n",
       "5  bar    two -0.415399  0.549753\n",
       "6  foo    one -0.831433 -1.157519\n",
       "7  foo  three -0.285010 -1.067717"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({'A': ['foo','bar','foo','bar','foo','bar','foo','foo'],\n",
    "                   'B': ['one','one','two','three','two','two','one','three'],\n",
    "                   'C': np.random.randn(8),\n",
    "                   'D': np.random.randn(8)})\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 一. 分组使用聚合函数做数据统计"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.1. 单个列groupby，查询所有数据列的统计"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>-0.177735</td>\n",
       "      <td>1.121826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>0.501904</td>\n",
       "      <td>-6.490991</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            C         D\n",
       "A                      \n",
       "bar -0.177735  1.121826\n",
       "foo  0.501904 -6.490991"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('A').sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到：\n",
    "1. groupby中的'A'变成了数据的索引列;\n",
    "2. 因为要统计sum，但B列不是数字，所以被自动忽略掉;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2. 多个列groupby，查询所有数据列的统计"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>-0.065097</td>\n",
       "      <td>0.066270</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>three</th>\n",
       "      <td>0.302761</td>\n",
       "      <td>0.505803</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.415399</td>\n",
       "      <td>0.549753</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">foo</th>\n",
       "      <th>one</th>\n",
       "      <td>0.061238</td>\n",
       "      <td>-1.453432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>three</th>\n",
       "      <td>-0.285010</td>\n",
       "      <td>-1.067717</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>0.332219</td>\n",
       "      <td>-1.258206</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  C         D\n",
       "A   B                        \n",
       "bar one   -0.065097  0.066270\n",
       "    three  0.302761  0.505803\n",
       "    two   -0.415399  0.549753\n",
       "foo one    0.061238 -1.453432\n",
       "    three -0.285010 -1.067717\n",
       "    two    0.332219 -1.258206"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['A','B']).mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到：(\\['A','B'\\])成对变成了二级索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>bar</td>\n",
       "      <td>one</td>\n",
       "      <td>-0.065097</td>\n",
       "      <td>0.066270</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>bar</td>\n",
       "      <td>three</td>\n",
       "      <td>0.302761</td>\n",
       "      <td>0.505803</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>bar</td>\n",
       "      <td>two</td>\n",
       "      <td>-0.415399</td>\n",
       "      <td>0.549753</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>0.061238</td>\n",
       "      <td>-1.453432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>foo</td>\n",
       "      <td>three</td>\n",
       "      <td>-0.285010</td>\n",
       "      <td>-1.067717</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>foo</td>\n",
       "      <td>two</td>\n",
       "      <td>0.332219</td>\n",
       "      <td>-1.258206</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A      B         C         D\n",
       "0  bar    one -0.065097  0.066270\n",
       "1  bar  three  0.302761  0.505803\n",
       "2  bar    two -0.415399  0.549753\n",
       "3  foo    one  0.061238 -1.453432\n",
       "4  foo  three -0.285010 -1.067717\n",
       "5  foo    two  0.332219 -1.258206"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['A','B'],as_index=False).mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3. 同时查看多种数据统计"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"3\" halign=\"left\">C</th>\n",
       "      <th colspan=\"3\" halign=\"left\">D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>sum</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>sum</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>-0.177735</td>\n",
       "      <td>-0.059245</td>\n",
       "      <td>0.359115</td>\n",
       "      <td>1.121826</td>\n",
       "      <td>0.373942</td>\n",
       "      <td>0.267357</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>0.501904</td>\n",
       "      <td>0.100381</td>\n",
       "      <td>1.170803</td>\n",
       "      <td>-6.490991</td>\n",
       "      <td>-1.298198</td>\n",
       "      <td>0.366594</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            C                             D                    \n",
       "          sum      mean       std       sum      mean       std\n",
       "A                                                              \n",
       "bar -0.177735 -0.059245  0.359115  1.121826  0.373942  0.267357\n",
       "foo  0.501904  0.100381  1.170803 -6.490991 -1.298198  0.366594"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('A').agg([np.sum,np.mean,np.std])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到：列变成了多级索引"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.4. 查看单列的结果统计数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sum</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>-0.177735</td>\n",
       "      <td>-0.059245</td>\n",
       "      <td>0.359115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>0.501904</td>\n",
       "      <td>0.100381</td>\n",
       "      <td>1.170803</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          sum      mean       std\n",
       "A                                \n",
       "bar -0.177735 -0.059245  0.359115\n",
       "foo  0.501904  0.100381  1.170803"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 方法1：预过滤，性能更好\n",
    "df.groupby('A')['C'].agg([np.sum,np.mean,np.std])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sum</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>-0.177735</td>\n",
       "      <td>-0.059245</td>\n",
       "      <td>0.359115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>0.501904</td>\n",
       "      <td>0.100381</td>\n",
       "      <td>1.170803</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          sum      mean       std\n",
       "A                                \n",
       "bar -0.177735 -0.059245  0.359115\n",
       "foo  0.501904  0.100381  1.170803"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 方法二\n",
    "df.groupby('A').agg([np.sum,np.mean,np.std])['C']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.5. 不同列使用不同的聚合函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>-0.177735</td>\n",
       "      <td>0.373942</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>0.501904</td>\n",
       "      <td>-1.298198</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            C         D\n",
       "A                      \n",
       "bar -0.177735  0.373942\n",
       "foo  0.501904 -1.298198"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('A').agg({\"C\":np.sum,\"D\":np.mean})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 二. 遍历groupby的结果理解执行流程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "for循环可以直接遍历每个group"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1. 遍历单个列聚合的分组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pandas.core.groupby.groupby.DataFrameGroupBy object at 0x000001AC08EE34A8>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g = df.groupby('A')\n",
    "g"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "bar\n",
      "     A      B         C         D\n",
      "1  bar    one -0.065097  0.066270\n",
      "3  bar  three  0.302761  0.505803\n",
      "5  bar    two -0.415399  0.549753\n",
      "\n",
      "foo\n",
      "     A      B         C         D\n",
      "0  foo    one  0.953909 -1.749344\n",
      "2  foo    two  1.679496 -1.617316\n",
      "4  foo    two -1.015058 -0.899095\n",
      "6  foo    one -0.831433 -1.157519\n",
      "7  foo  three -0.285010 -1.067717\n",
      "\n"
     ]
    }
   ],
   "source": [
    "for name,group in g:\n",
    "    print(name)\n",
    "    print(group)\n",
    "    print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***可以获取每个分组的数据***"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>bar</td>\n",
       "      <td>one</td>\n",
       "      <td>-0.065097</td>\n",
       "      <td>0.066270</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>bar</td>\n",
       "      <td>three</td>\n",
       "      <td>0.302761</td>\n",
       "      <td>0.505803</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>bar</td>\n",
       "      <td>two</td>\n",
       "      <td>-0.415399</td>\n",
       "      <td>0.549753</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A      B         C         D\n",
       "1  bar    one -0.065097  0.066270\n",
       "3  bar  three  0.302761  0.505803\n",
       "5  bar    two -0.415399  0.549753"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g.get_group('bar')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2. 遍历多个列聚合的分组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "g = df.groupby(['A','B'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('bar', 'one')\n",
      "     A    B         C        D\n",
      "1  bar  one -0.065097  0.06627\n",
      "\n",
      "('bar', 'three')\n",
      "     A      B         C         D\n",
      "3  bar  three  0.302761  0.505803\n",
      "\n",
      "('bar', 'two')\n",
      "     A    B         C         D\n",
      "5  bar  two -0.415399  0.549753\n",
      "\n",
      "('foo', 'one')\n",
      "     A    B         C         D\n",
      "0  foo  one  0.953909 -1.749344\n",
      "6  foo  one -0.831433 -1.157519\n",
      "\n",
      "('foo', 'three')\n",
      "     A      B        C         D\n",
      "7  foo  three -0.28501 -1.067717\n",
      "\n",
      "('foo', 'two')\n",
      "     A    B         C         D\n",
      "2  foo  two  1.679496 -1.617316\n",
      "4  foo  two -1.015058 -0.899095\n",
      "\n"
     ]
    }
   ],
   "source": [
    "for name,group in g:\n",
    "    print(name)\n",
    "    print(group)\n",
    "    print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，name是一个2个元素的tuple，代表不同的列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>0.953909</td>\n",
       "      <td>-1.749344</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>-0.831433</td>\n",
       "      <td>-1.157519</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A    B         C         D\n",
       "0  foo  one  0.953909 -1.749344\n",
       "6  foo  one -0.831433 -1.157519"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g.get_group(('foo','one'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***可以直接查询group后的某几列，生成Series或者子DataFrame***"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pandas.core.groupby.groupby.SeriesGroupBy object at 0x000001AC08ECB5C0>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g['C']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('bar', 'one')\n",
      "1   -0.065097\n",
      "Name: C, dtype: float64\n",
      "<class 'pandas.core.series.Series'>\n",
      "\n",
      "('bar', 'three')\n",
      "3    0.302761\n",
      "Name: C, dtype: float64\n",
      "<class 'pandas.core.series.Series'>\n",
      "\n",
      "('bar', 'two')\n",
      "5   -0.415399\n",
      "Name: C, dtype: float64\n",
      "<class 'pandas.core.series.Series'>\n",
      "\n",
      "('foo', 'one')\n",
      "0    0.953909\n",
      "6   -0.831433\n",
      "Name: C, dtype: float64\n",
      "<class 'pandas.core.series.Series'>\n",
      "\n",
      "('foo', 'three')\n",
      "7   -0.28501\n",
      "Name: C, dtype: float64\n",
      "<class 'pandas.core.series.Series'>\n",
      "\n",
      "('foo', 'two')\n",
      "2    1.679496\n",
      "4   -1.015058\n",
      "Name: C, dtype: float64\n",
      "<class 'pandas.core.series.Series'>\n",
      "\n"
     ]
    }
   ],
   "source": [
    "for name,group in g['C']:\n",
    "    print(name)\n",
    "    print(group)\n",
    "    print(type(group))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其实所有的聚合统计，都是在DataFrame和Series上进行的;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 三. 实例分组探索天气数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日期</th>\n",
       "      <th>城市</th>\n",
       "      <th>行政区</th>\n",
       "      <th>观测站</th>\n",
       "      <th>气温(度)</th>\n",
       "      <th>相对湿度(%)</th>\n",
       "      <th>累积雨量(mm)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>新北市</td>\n",
       "      <td>烏來區</td>\n",
       "      <td>福山</td>\n",
       "      <td>13.7</td>\n",
       "      <td>92</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>臺南市</td>\n",
       "      <td>安平區</td>\n",
       "      <td>安平</td>\n",
       "      <td>23.5</td>\n",
       "      <td>70</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>臺東縣</td>\n",
       "      <td>東河鄉</td>\n",
       "      <td>七塊厝</td>\n",
       "      <td>19.6</td>\n",
       "      <td>86</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>新北市</td>\n",
       "      <td>貢寮區</td>\n",
       "      <td>福隆</td>\n",
       "      <td>14.2</td>\n",
       "      <td>96</td>\n",
       "      <td>-99.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>南投縣</td>\n",
       "      <td>仁愛鄉</td>\n",
       "      <td>小奇萊</td>\n",
       "      <td>8.3</td>\n",
       "      <td>57</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           日期   城市  行政区  观测站  气温(度)  相对湿度(%)  累积雨量(mm)\n",
       "0  2015-01-01  新北市  烏來區   福山   13.7       92       0.0\n",
       "1  2015-01-02  臺南市  安平區   安平   23.5       70       0.0\n",
       "2  2015-01-03  臺東縣  東河鄉  七塊厝   19.6       86       0.0\n",
       "3  2015-01-04  新北市  貢寮區   福隆   14.2       96     -99.0\n",
       "4  2015-01-05  南投縣  仁愛鄉  小奇萊    8.3       57       0.0"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(\"../datas/weather_20230115134249.csv\", encoding='utf-8')\n",
    "#替换温度的后缀℃\n",
    "df.loc[:,\"气温(度)\"]=df[\"气温(度)\"].str.replace(\"℃\",\"\").astype(\"float\")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日期</th>\n",
       "      <th>城市</th>\n",
       "      <th>行政区</th>\n",
       "      <th>观测站</th>\n",
       "      <th>气温(度)</th>\n",
       "      <th>相对湿度(%)</th>\n",
       "      <th>累积雨量(mm)</th>\n",
       "      <th>month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>新北市</td>\n",
       "      <td>烏來區</td>\n",
       "      <td>福山</td>\n",
       "      <td>13.7</td>\n",
       "      <td>92</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>臺南市</td>\n",
       "      <td>安平區</td>\n",
       "      <td>安平</td>\n",
       "      <td>23.5</td>\n",
       "      <td>70</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>臺東縣</td>\n",
       "      <td>東河鄉</td>\n",
       "      <td>七塊厝</td>\n",
       "      <td>19.6</td>\n",
       "      <td>86</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>新北市</td>\n",
       "      <td>貢寮區</td>\n",
       "      <td>福隆</td>\n",
       "      <td>14.2</td>\n",
       "      <td>96</td>\n",
       "      <td>-99.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>南投縣</td>\n",
       "      <td>仁愛鄉</td>\n",
       "      <td>小奇萊</td>\n",
       "      <td>8.3</td>\n",
       "      <td>57</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           日期   城市  行政区  观测站  气温(度)  相对湿度(%)  累积雨量(mm)    month\n",
       "0  2015-01-01  新北市  烏來區   福山   13.7       92       0.0  2015-01\n",
       "1  2015-01-02  臺南市  安平區   安平   23.5       70       0.0  2015-01\n",
       "2  2015-01-03  臺東縣  東河鄉  七塊厝   19.6       86       0.0  2015-01\n",
       "3  2015-01-04  新北市  貢寮區   福隆   14.2       96     -99.0  2015-01\n",
       "4  2015-01-05  南投縣  仁愛鄉  小奇萊    8.3       57       0.0  2015-01"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 新增一列为月份\n",
    "df['month'] = df['日期'].str[:7]\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1. 查看每个月的最高温度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "month\n",
       "2015-01    27.0\n",
       "2015-02    28.5\n",
       "2015-03    29.5\n",
       "2015-04    29.6\n",
       "2015-05    27.5\n",
       "2015-06    26.9\n",
       "2015-07    30.6\n",
       "2015-08    27.2\n",
       "2015-09    28.1\n",
       "2015-10    29.3\n",
       "2015-11    26.7\n",
       "2015-12    28.5\n",
       "2016-01    28.1\n",
       "2016-02    27.1\n",
       "2016-03    29.2\n",
       "2016-04    28.3\n",
       "Name: 气温(度), dtype: float64"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = df.groupby('month')['气温(度)'].max()\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.series.Series"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1ac0925dfd0>"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2. 查看每个月的最高温度、平均湿度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日期</th>\n",
       "      <th>城市</th>\n",
       "      <th>行政区</th>\n",
       "      <th>观测站</th>\n",
       "      <th>气温(度)</th>\n",
       "      <th>相对湿度(%)</th>\n",
       "      <th>累积雨量(mm)</th>\n",
       "      <th>month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>新北市</td>\n",
       "      <td>烏來區</td>\n",
       "      <td>福山</td>\n",
       "      <td>13.7</td>\n",
       "      <td>92</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>臺南市</td>\n",
       "      <td>安平區</td>\n",
       "      <td>安平</td>\n",
       "      <td>23.5</td>\n",
       "      <td>70</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>臺東縣</td>\n",
       "      <td>東河鄉</td>\n",
       "      <td>七塊厝</td>\n",
       "      <td>19.6</td>\n",
       "      <td>86</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>新北市</td>\n",
       "      <td>貢寮區</td>\n",
       "      <td>福隆</td>\n",
       "      <td>14.2</td>\n",
       "      <td>96</td>\n",
       "      <td>-99.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>南投縣</td>\n",
       "      <td>仁愛鄉</td>\n",
       "      <td>小奇萊</td>\n",
       "      <td>8.3</td>\n",
       "      <td>57</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2015-01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           日期   城市  行政区  观测站  气温(度)  相对湿度(%)  累积雨量(mm)    month\n",
       "0  2015-01-01  新北市  烏來區   福山   13.7       92       0.0  2015-01\n",
       "1  2015-01-02  臺南市  安平區   安平   23.5       70       0.0  2015-01\n",
       "2  2015-01-03  臺東縣  東河鄉  七塊厝   19.6       86       0.0  2015-01\n",
       "3  2015-01-04  新北市  貢寮區   福隆   14.2       96     -99.0  2015-01\n",
       "4  2015-01-05  南投縣  仁愛鄉  小奇萊    8.3       57       0.0  2015-01"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>气温(度)</th>\n",
       "      <th>相对湿度(%)</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>month</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2015-01</th>\n",
       "      <td>27.0</td>\n",
       "      <td>-568.645161</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-02</th>\n",
       "      <td>28.5</td>\n",
       "      <td>-281.178571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-03</th>\n",
       "      <td>29.5</td>\n",
       "      <td>74.774194</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-04</th>\n",
       "      <td>29.6</td>\n",
       "      <td>-254.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-05</th>\n",
       "      <td>27.5</td>\n",
       "      <td>-240.838710</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-06</th>\n",
       "      <td>26.9</td>\n",
       "      <td>-919.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-07</th>\n",
       "      <td>30.6</td>\n",
       "      <td>-247.096774</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-08</th>\n",
       "      <td>27.2</td>\n",
       "      <td>76.935484</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-09</th>\n",
       "      <td>28.1</td>\n",
       "      <td>76.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-10</th>\n",
       "      <td>29.3</td>\n",
       "      <td>-243.967742</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-11</th>\n",
       "      <td>26.7</td>\n",
       "      <td>82.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-12</th>\n",
       "      <td>28.5</td>\n",
       "      <td>76.516129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01</th>\n",
       "      <td>28.1</td>\n",
       "      <td>-238.935484</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-02</th>\n",
       "      <td>27.1</td>\n",
       "      <td>75.482759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-03</th>\n",
       "      <td>29.2</td>\n",
       "      <td>-246.548387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-04</th>\n",
       "      <td>28.3</td>\n",
       "      <td>-279.892857</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         气温(度)     相对湿度(%)\n",
       "month                     \n",
       "2015-01   27.0 -568.645161\n",
       "2015-02   28.5 -281.178571\n",
       "2015-03   29.5   74.774194\n",
       "2015-04   29.6 -254.100000\n",
       "2015-05   27.5 -240.838710\n",
       "2015-06   26.9 -919.500000\n",
       "2015-07   30.6 -247.096774\n",
       "2015-08   27.2   76.935484\n",
       "2015-09   28.1   76.666667\n",
       "2015-10   29.3 -243.967742\n",
       "2015-11   26.7   82.466667\n",
       "2015-12   28.5   76.516129\n",
       "2016-01   28.1 -238.935484\n",
       "2016-02   27.1   75.482759\n",
       "2016-03   29.2 -246.548387\n",
       "2016-04   28.3 -279.892857"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "group_data = df.groupby('month').agg({'气温(度)':np.max,\"相对湿度(%)\":np.mean})\n",
    "group_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1ac08ecb0b8>"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "group_data.plot()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
